package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomDateTime;
import br.com.telescope.adsrt.dom.DomId;
import br.com.telescope.adsrt.dom.DomInteger;
import br.com.telescope.adsrt.dom.DomLogin;
import br.com.telescope.adsrt.dom.DomText;
import br.com.telescope.adsrt.dom.DomTextLong;
import br.com.telescope.adsrt.dom.DomUpper;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.config.Config;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.ListFeature;
import br.com.telescope.t2.feature.QueryFeature;
import br.com.telescope.t2.feature.SheetFeature;
import br.com.telescope.t2.feature.ViewFeature;
import solutions.ferpa.ztest.ent.*;

/**
 * Consultar Logs.
 * <p>
 * Consultar registros de LOG permitindo filtrar por período, sessão, 
 * tipo de registro, etc.
 * <P>
 * Telescope origin: RTLOG.CON_LOGS
 * <P>
 * Base entity: RTLOG.LOGS
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class ConLogs extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTLOG.CON_LOGS";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Consultar Logs");
    }
    
    protected EntLogs logs;
    protected EntLogs rec; // NEED_TJW1_COMPATIBILITY
    
    // Record items
    private DomDateTime aDataHora;
    private DomUpper aOrigem;
    private DomText aRegistro;
    private DomUpper aTipo;
    private DomTextLong aDescricao;
    private DomLogin aUsuario;
    private DomText aEnderecoRemoto;
    private DomText aSessaoId;
    private DomInteger aTempo;
    private DomId aId;
    
    // Query items
    private DomDateTime qDataHora;
    private DomText qSessaoId;
    private DomTextLong qDescricao;
    private DomLogin qUsuario;
    private DomText qEnderecoRemoto;
    private DomUpper qTipo;
    private DomInteger qTempo;
    private DomUpper qOrigem;
    private DomText qRegistro;
    
    @Override
    public String getBaseSql() {
        return "select LOGS.*"
                + " from LOGS LOGS";
    }
    
    @Override
    public void initAttributes() {
        
        aDataHora = new DomDateTime();
        aDataHora.context(ctx).name("DATA_HORA").label("Data e hora");
        
        aOrigem = new DomUpper();
        aOrigem.context(ctx).name("ORIGEM").label("Origem").group(true);
        
        aRegistro = new DomText();
        aRegistro.context(ctx).name("REGISTRO").label("Registro");
        
        aTipo = new DomUpper();
        aTipo.context(ctx).name("TIPO").label("Tipo").width(20).group(true);
        
        aDescricao = new DomTextLong();
        aDescricao.context(ctx).name("DESCRICAO").label("Descrição");
        
        aUsuario = new DomLogin();
        aUsuario.context(ctx).name("USUARIO").label("Usuário").group(true);
        
        aEnderecoRemoto = new DomText();
        aEnderecoRemoto.context(ctx).name("ENDERECO_REMOTO").label("Endereço").group(true);
        
        aSessaoId = new DomText();
        aSessaoId.context(ctx).name("SESSAO_ID").label("Sessão").group(true);
        
        aTempo = new DomInteger();
        aTempo.context(ctx).name("TEMPO").label("Tempo");
        
        aId = new DomId();
        aId.context(ctx).name("ID").label("Id");
        
        
        qDataHora = new DomDateTime();
        qDataHora.context(ctx).name("DATA_HORA").label("Data e hora");
        
        qSessaoId = new DomText();
        qSessaoId.context(ctx).name("SESSAO_ID").label("Sessão");
        
        qDescricao = new DomTextLong();
        qDescricao.context(ctx).name("DESCRICAO").label("Descrição");
        
        qUsuario = new DomLogin();
        qUsuario.context(ctx).name("USUARIO").label("Usuário");
        
        qEnderecoRemoto = new DomText();
        qEnderecoRemoto.context(ctx).name("ENDERECO_REMOTO").label("Endereço");
        
        qTipo = new DomUpper();
        qTipo.context(ctx).name("TIPO").label("Tipo");
        
        qTempo = new DomInteger();
        qTempo.context(ctx).name("TEMPO").label("Tempo");
        
        qOrigem = new DomUpper();
        qOrigem.context(ctx).name("ORIGEM").label("Origem");
        
        qRegistro = new DomText();
        qRegistro.context(ctx).name("REGISTRO").label("Registro");
    }
    
    @Override
    public String getQueryPkColumn() {
        return "LOGS.ID";
    }
    
    @Override
    public void setId(String value) {
        this.aId.setValue(value);
    }
    
    @Override
    public EntLogs getRecord() {
        if (logs == null) {
            logs = new EntLogs(ctx);
            rec = logs;
        }
        return this.logs;
    }
    
    @Override
    public String getContextName() {
        return aDataHora.toText();
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "DATA_HORA, ORIGEM, REGISTRO, TIPO";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="QUERY">
    public class FQuery extends QueryFeature {
        
        @Override
        public void initForm() {
            addField(qDataHora, "opt");
            addField(qOrigem, "opt");
            addField(qRegistro, "opt");
            addField(qTipo, "opt");
            addField(qDescricao, "opt");
            addField(qUsuario, "opt");
            addField(qEnderecoRemoto, "opt");
            addField(qSessaoId, "opt");
            addField(qTempo, "opt");
        }
        
        @Override
        public void onAction() {
            
        }
        
        {
            setFeatureName("QUERY");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="LIST">
    public class FList extends ListFeature {
        
        @Override
        public void initForm() {
            aDataHora.setWidth(20);
            addField(aDataHora, "view");
            addField(aOrigem, "view");
            aRegistro.setWidth(6);
            addField(aRegistro, "view");
            aTipo.setWidth(6);
            addField(aTipo, "view");
            aDescricao.setWidth(50);
            addField(aDescricao, "view");
            addField(aUsuario, "view");
            aEnderecoRemoto.setWidth(8);
            addField(aEnderecoRemoto, "view");
            aSessaoId.setWidth(8);
            addField(aSessaoId, "view");
            aTempo.setWidth(3);
            addField(aTempo, "view");
        }
        
        @Override
        public void preRecord() {
            try {
                formatarDescricaoList();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("LIST");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="VIEW">
    public class FView extends ViewFeature {
        
        @Override
        public void initForm() {
            addField(aDataHora, "view");
            addField(aOrigem, "view");
            addField(aRegistro, "view");
            addField(aTipo, "view");
            addField(aDescricao, "view");
            addField(aUsuario, "view");
            addField(aEnderecoRemoto, "view");
            addField(aSessaoId, "view");
            addField(aTempo, "view");
        }
        
        {
            setFeatureName("VIEW");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="SHEET">
    public class FSheet extends SheetFeature {
        
        @Override
        public void initForm() {
            addField(aDataHora, "view");
            addField(aOrigem, "view");
            addField(aRegistro, "view");
            addField(aTipo, "view");
            addField(aDescricao, "view");
            addField(aUsuario, "view");
            addField(aEnderecoRemoto, "view");
            addField(aSessaoId, "view");
            addField(aTempo, "view");
        }
        
        {
            setFeatureName("SHEET");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FQuery());
        addFeature(new FList());
        addFeature(new FView());
        addFeature(new FSheet());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "QUERY";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public java.sql.Timestamp getDataHora() {
        return aDataHora.getValue();
    }
    
    public void setDataHora(java.sql.Timestamp value) {
        this.aDataHora.setValue(value);
    }
    
    public String getOrigem() {
        return aOrigem.getValue();
    }
    
    public void setOrigem(String value) {
        this.aOrigem.setValue(value);
    }
    
    public String getRegistro() {
        return aRegistro.getValue();
    }
    
    public void setRegistro(String value) {
        this.aRegistro.setValue(value);
    }
    
    public String getTipo() {
        return aTipo.getValue();
    }
    
    public void setTipo(String value) {
        this.aTipo.setValue(value);
    }
    
    public String getDescricao() {
        return aDescricao.getValue();
    }
    
    public void setDescricao(String value) {
        this.aDescricao.setValue(value);
    }
    
    public String getUsuario() {
        return aUsuario.getValue();
    }
    
    public void setUsuario(String value) {
        this.aUsuario.setValue(value);
    }
    
    public String getEnderecoRemoto() {
        return aEnderecoRemoto.getValue();
    }
    
    public void setEnderecoRemoto(String value) {
        this.aEnderecoRemoto.setValue(value);
    }
    
    public String getSessaoId() {
        return aSessaoId.getValue();
    }
    
    public void setSessaoId(String value) {
        this.aSessaoId.setValue(value);
    }
    
    public Integer getTempo() {
        return aTempo.getValue();
    }
    
    public void setTempo(Integer value) {
        this.aTempo.setValue(value);
    }
    
    @Override
    public Long getId() {
        return aId.getValue();
    }
    
    public void setId(Long value) {
        this.aId.setValue(value);
    }
    public String getQueryDataHora() {
        return qDataHora.getQueryValue();
    }
    
    public void setQueryDataHora(String value) {
        this.qDataHora.setQueryValue(value);
    }
    public String getQueryOrigem() {
        return qOrigem.getQueryValue();
    }
    
    public void setQueryOrigem(String value) {
        this.qOrigem.setQueryValue(value);
    }
    public String getQueryRegistro() {
        return qRegistro.getQueryValue();
    }
    
    public void setQueryRegistro(String value) {
        this.qRegistro.setQueryValue(value);
    }
    public String getQueryTipo() {
        return qTipo.getQueryValue();
    }
    
    public void setQueryTipo(String value) {
        this.qTipo.setQueryValue(value);
    }
    public String getQueryDescricao() {
        return qDescricao.getQueryValue();
    }
    
    public void setQueryDescricao(String value) {
        this.qDescricao.setQueryValue(value);
    }
    public String getQueryUsuario() {
        return qUsuario.getQueryValue();
    }
    
    public void setQueryUsuario(String value) {
        this.qUsuario.setQueryValue(value);
    }
    public String getQueryEnderecoRemoto() {
        return qEnderecoRemoto.getQueryValue();
    }
    
    public void setQueryEnderecoRemoto(String value) {
        this.qEnderecoRemoto.setQueryValue(value);
    }
    public String getQuerySessaoId() {
        return qSessaoId.getQueryValue();
    }
    
    public void setQuerySessaoId(String value) {
        this.qSessaoId.setQueryValue(value);
    }
    public String getQueryTempo() {
        return qTempo.getQueryValue();
    }
    
    public void setQueryTempo(String value) {
        this.qTempo.setQueryValue(value);
    }
    // </editor-fold>
    
    /**
     * Formatar descrição para LIST.
     * <p>
     * Formata a descrição do Log para ser apresentada na LIST.
     * <P>
     * As linhas que forem muito extensas, são truncadas e acrescentada 
     * "..."
     * <P>
     * Se existirem muitas linhas, apresenta apenas as primeiras seguidos de 
     * um "..."
     * <P>
     */
    private void formatarDescricaoList() throws AdsException {
        // <user-code id="2936401" parentId="2936398" hashcode="-25d2f3da" length="942">
        // import br.com.telescope.t2.config.Config;
        Config cfg = Config.getInstance();
        int maxLines = cfg.getParameterInteger(globalName("LIST_LINHAS_DESCRICAO_MAX"), 6);
        int maxWidth = cfg.getParameterInteger("LIST_TAMANHO_DESCRICAO_MAX", 50);
        if (aDescricao.isNotNull()) {
            String[] linhas = aDescricao.getValue().split("\n");
            StringBuilder text = new StringBuilder(200);
            for (String linha : linhas) {
                if (text.length() > 0) text.append("\n");
                if (--maxLines < 0) {
                    text.append("...");
                    break;
                }
                if (linha.length() > maxWidth) {
                    linha = linha.substring(0, maxWidth) + "...";
                }
                text.append(linha);
            }
            aDescricao.setValue(text.toString());
        }
        if (aSessaoId.isNotNull() && aSessaoId.getValue().length() > 8 && getCurrentFeature() instanceof ListFeature) {
            aSessaoId.setValue(aSessaoId.getValue().substring(0,8) + "...");
        }
        
        // </user-code>
    }
}
